package _220331;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * @author ShadowLim
 * @create 2022-03-31-15:59
 */

public class 卡片换位 {
    static char[][] c = new char[2][3];
//    static int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    static int startPos = 0, endPos = 0;
//    static int spacePos = 0;
    static String startStr;
    static Space sapceNode;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        for (int i = 0; i < 2; i++) {
//            c[i] = scanner.nextLine().toCharArray();    // nextLine() 不是next()
//        }
////        for (int i = 0; i < c.length; i++) {
////            for (int j = 0; j < c[0].length; j++) {
////                System.out.print(c[i][j] + " ");
////            }
////        }
        String s1 = scanner.nextLine();
        String s2 = scanner.nextLine();
        startStr = s1 + s2;
        for (int i = 0; i < c[0].length; i++) {
            c[0][i] = s1.charAt(i);
        }
        for (int i = 0; i < c[0].length; i++) {
            c[1][i] = s2.charAt(i);
        }
        sapceNode = new Space();
        for (int i = 0; i < c.length; i++) {
            for (int j = 0; j < c[0].length; j++) {
                if (c[i][j] == 'A') {
                    startPos = i * 3 + j;
                }
                if (c[i][j] == 'B') {
                    endPos = i * 3 + j;
                }
                if (c[i][j] == ' ') {
                    sapceNode.x = i;
                    sapceNode.y = j;
                }
            }
        }
        bfs();
    }

    private static void bfs() {
        Queue<Node> q = new LinkedList<Node>();
        Node cur = new Node(sapceNode, startStr);
        HashSet<String> set = new HashSet<>();
        set.add(startStr);
        q.add(cur);
        while (!q.isEmpty()) {
            Node node = q.poll();
            if (check(node.str)) {
                System.out.println(node.step);
                return;
            }
            int x = node.sp.x, y = node.sp.y;
            if (x - 1 >= 0) {   // 左
                int ni = (x - 1) * 3 + y;   // 新的空格位置
                int nj = x * 3 + y;         // 旧的空格位置
//                String tempStr = swap(node.str, ni, nj);  // 一样可以
                String tempStr = swap(node.str, nj, ni);
                if (set.add(tempStr)) {
                    Space sp = new Space();
                    sp.x = x - 1;
                    sp.y = y;
                    Node tempNode = new Node(sp, tempStr);
                    tempNode.step = node.step + 1;
                    q.offer(tempNode);
                }
            }
            if (x + 1 < 2) {    // 右
                int ni = (x + 1) * 3 + y;   // 新的空格位置
                int nj = x * 3 + y;         // 旧的空格位置
//                String tempStr = swap(node.str, ni, nj);
                String tempStr = swap(node.str, nj, ni);
                if (set.add(tempStr)) {
                    Space sp = new Space();
                    sp.x = x + 1;
                    sp.y = y;
                    Node tempNode = new Node(sp, tempStr);
                    tempNode.step = node.step + 1;
                    q.offer(tempNode);
                }
            }
            if (y - 1 >= 0) {   // 上
                int ni = x * 3 + y - 1; // 新的空格位置
                int nj = x * 3 + y;     // 旧的空格位置
//                String tempStr = swap(node.str, ni, nj);
                String tempStr = swap(node.str, nj, ni);
                if (set.add(tempStr)) {
                    Space sp = new Space();
                    sp.x = x;
                    sp.y = y - 1;
                    Node tempNode = new Node(sp, tempStr);
                    tempNode.step = node.step + 1;
                    q.offer(tempNode);
                }
            }
            if (y + 1 < 3) {    // 下
                int ni = x * 3 + y + 1; // 新的空格位置
                int nj = x * 3 + y;     // 旧的空格位置
//                String tempStr = swap(node.str, ni, nj);
                String tempStr = swap(node.str, nj, ni);
                if (set.add(tempStr)) {
                    Space sp = new Space();
                    sp.x = x;
                    sp.y = y + 1;
                    Node tempNode = new Node(sp, tempStr);
                    tempNode.step = node.step + 1;
                    q.offer(tempNode);
                }
            }
        }
    }

    private static String swap(String s, int x, int y) {
        char[] sc = s.toCharArray();
        char ch = sc[x];
        sc[x] = sc[y];
        sc[y] = ch;
        return new String(sc);
    }

    private static boolean check(String s) {
        int x = 0, y = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'A') x = i;
            if (s.charAt(i) == 'B') y = i;
        }
        if (x == endPos && y == startPos) {
            return true;
        }
        return false;
    }

    static class Space {
        int x;
        int y;
    }

    static class Node {
        int step;
        String str;
        Space sp = new Space();

        public Node() {

        }

        public Node(Space sp, String str) {
            this.sp.x = sp.x;
            this.sp.y = sp.y;
            this.str = str;
        }
    }
}


//import java.util.*;
//
//public class 卡片换位 {
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        String start = "";
//        int a_start = 0, b_start = 0;
//        for (int i = 0; i < 2; i++) {
//            start += sc.nextLine();
//            for (int j = 0; j < 3; j++){
//                char c = start.charAt((i * 3) + j);
//                if (c == 'A') a_start = i * 3 + j; // A初始坐标
//                if (c == 'B') b_start = i * 3 + j; // B初始坐标 二维转换为一维
//            }
//        }
//
//        System.out.println(bfs(start, a_start, b_start));
//    }
//
//    private static int bfs(String start, int a_start, int b_start) {
//        Queue<String> q = new LinkedList<>();
//        Map<String, Integer> map = new HashMap(); // 用map存储 key是每个字符串的状态 value是操作的次数
//        q.offer(start);
//        map.put(start, 0);
//
//        int[] dx = {0, 1, 0, -1}, dy = {1 ,0, -1, 0};
//        while (!q.isEmpty()) {
//            String t = q.poll();
//            int distance = map.get(t);
//
//            if (t.indexOf('B') == a_start && t.indexOf('A') == b_start) return distance; // 交换成功
//
//            int k = t.indexOf(" "); // 找到空格下标
//            int x = k / 3, y = k % 3; // 将一维转换为二维下标
//            for (int i = 0; i < 4; i++) {
//                int a = x + dx[i], b = y + dy[i];
//                if (a < 0 || a >= 2 || b < 0 || b >= 3) continue;
//                String s = swap(t, k, a * 3 + b); // 交换下标
//                if (map.get(s) == null){ // 表示还没出现过这个状态
//                    map.put(s, distance + 1); // 距离+1
//                    q.offer(s);
//                }
//            }
//        }
//        return -1;
//    }
//
//    private static String swap(String s, int i, int j){
//        char[] c = s.toCharArray();
//        char ch = c[i];
//        c[i] = c[j];
//        c[j] = ch;
//        return new String(c);
//    }
//}
